import { BasicColumn } from "/@/components/Table";
import { FormSchema } from "/@/components/Table";
import { getAllRolesListNoByTenant, getAllTenantList } from "./user.api";
import { rules } from "/@/utils/helper/validator";
import { render } from "/@/utils/common/renderUtils";

export const columns: BasicColumn[] = [
  {
    title: "用户账号",
    dataIndex: "username",
    width: '10%'
  },
  {
    title: "用户姓名",
    dataIndex: "realname",
    width: 100,
    ifShow: false
  },
  {
    title: "头像",
    dataIndex: "avatar",
    width: 120,
    customRender: render.renderAvatar,
    ifShow: false
  },
  {
    title: "性别",
    dataIndex: "sex",
    width: 80,
    sorter: true,
    customRender: ({ text }) => {
      return render.renderDict(text, "sex");
    },
    ifShow: false
  },
  {
    title: "生日",
    dataIndex: "birthday",
    width: 100,
    ifShow: false
  },
  {
    title: "手机号",
    dataIndex: "phone",
    width: 100,
    ifShow: false
  },
  {
    title: "部门",
    width: 150,
    dataIndex: "orgCodeTxt",
    ifShow: false
  },
  {
    title: "负责部门",
    width: 150,
    dataIndex: "departIds_dictText",
    ifShow: false
  },
  {
    title: "key",
    dataIndex: "appKey",
    width: '20%'
  },
  {
    title: "链接1",
    dataIndex: "link_form1",
    width: '10%'
  },
  {
    title: "链接2",
    dataIndex: "link_form2",
    width: '10%'
  },
  {
    title: "状态",
    dataIndex: "status_dictText",
    width: '10%'
  }
];

export const recycleColumns: BasicColumn[] = [
  {
    title: "用户账号",
    dataIndex: "username",
    width: 100
  },
  {
    title: "用户姓名",
    dataIndex: "realname",
    width: 100
  },
  {
    title: "头像",
    dataIndex: "avatar",
    width: 80,
    customRender: render.renderAvatar
  },
  {
    title: "性别",
    dataIndex: "sex",
    width: 80,
    sorter: true,
    customRender: ({ text }) => {
      return render.renderDict(text, "sex");
    }
  }
];

export const searchFormSchema: FormSchema[] = [
  {
    label: "账号",
    field: "username",
    component: "JInput"
    //colProps: { span: 6 },
  },
  {
    label: "名字",
    field: "realname",
    component: "JInput"
    //colProps: { span: 6 },
  },
  {
    label: "性别",
    field: "sex",
    component: "JDictSelectTag",
    componentProps: {
      dictCode: "sex",
      placeholder: "请选择性别",
      stringToNumber: true
    }
    //colProps: { span: 6 },
  },
  {
    label: "手机号码",
    field: "phone",
    component: "Input"
    //colProps: { span: 6 },
  },
  {
    label: "用户状态",
    field: "status",
    component: "JDictSelectTag",
    componentProps: {
      dictCode: "user_status",
      placeholder: "请选择状态",
      stringToNumber: true
    }
    //colProps: { span: 6 },
  }
];

export const formSchema: FormSchema[] = [
  {
    label: "",
    field: "id",
    component: "Input",
    show: false
  },
  {
    label: "用户账号",
    field: "username",
    component: "Input",
    required: true,
    dynamicDisabled: ({ values }) => {
      return !!values.id;
    },
    dynamicRules: ({
                     model,
                     schema
                   }) => rules.duplicateCheckRule("sys_user", "username", model, schema, true)
  },
  {
    label: "登录密码",
    field: "password",
    component: "StrengthMeter",
    componentProps: {
      autocomplete: "new-password"
    },
    rules: [
      {
        required: true,
        message: "请输入登录密码"
      },
      {
        pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/,
        message: "密码由8位数字、大小写字母和特殊符号组成!"
      }
    ]
  },
  {
    label: "确认密码",
    field: "confirmPassword",
    component: "InputPassword",
    dynamicRules: ({ values }) => rules.confirmPassword(values, true)
  },
  {
    label: "用户姓名",
    field: "realname",
    required: false,
    component: "Input",
    show: false
  },
  {
    label: "工号",
    field: "workNo",
    required: false,
    component: "Input",
    dynamicRules: ({
                     model,
                     schema
                   }) => rules.duplicateCheckRule("sys_user", "work_no", model, schema, true),
    show: false
  },
  {
    label: "职务",
    field: "post",
    required: false,
    component: "JSelectPosition",
    componentProps: {
      labelKey: "name"
    },
    show: false
  },
  {
    label: "角色",
    field: "selectedroles",
    component: "ApiSelect",
    componentProps: {
      mode: "multiple",
      api: getAllRolesListNoByTenant,
      labelField: "roleName",
      valueField: "id",
      immediate: false
    }
  },
  /* {
     label: '所属部门',
     field: 'selecteddeparts',
     component: 'JSelectDept',
     componentProps: ({ formActionType, formModel }) => {
       return {
         sync: false,
         checkStrictly: true,
         defaultExpandLevel: 2,

         onSelect: (options, values) => {
           const { updateSchema } = formActionType;
           //所属部门修改后更新负责部门下拉框数据
           updateSchema([
             {
               field: 'departIds',
               componentProps: { options },
             },
           ]);
           //update-begin---author:wangshuai---date:2024-05-11---for:【issues/1222】用户编辑界面“所属部门”与“负责部门”联动出错整---
           if(!values){
             formModel.departIds = [];
             return;
           }
           //update-end---author:wangshuai---date:2024-05-11---for:【issues/1222】用户编辑界面“所属部门”与“负责部门”联动出错整---
           //所属部门修改后更新负责部门数据
           formModel.departIds && (formModel.departIds = formModel.departIds.filter((item) => values.value.indexOf(item) > -1));
         },
       };
     },
     show: false,
   },*/
  {
    label: "租户",
    field: "relTenantIds",
    component: "ApiSelect",
    componentProps: {
      mode: "multiple",
      api: getAllTenantList,
      numberToString: true,
      labelField: "name",
      valueField: "id",
      immediate: false
    },
    show: false
  },
  {
    label: "身份",
    field: "userIdentity",
    component: "RadioGroup",
    defaultValue: 1,
    componentProps: ({ formModel }) => {
      return {
        options: [
          { label: "普通用户", value: 1, key: "1" },
          { label: "上级", value: 2, key: "2" }
        ],
        onChange: () => {
          formModel.userIdentity == 1 && (formModel.departIds = []);
        }
      };
    },
    show: false
  },
  {
    label: "负责部门",
    field: "departIds",
    component: "Select",
    componentProps: {
      mode: "multiple"
    },
    ifShow: ({ values }) => values.userIdentity == 2,
    show: false
  },
  {
    label: "头像",
    field: "avatar",
    component: "JImageUpload",
    componentProps: {
      fileMax: 1
    },
    show: false
  },
  {
    label: "生日",
    field: "birthday",
    component: "DatePicker",
    show: false
  },
  {
    label: "性别",
    field: "sex",
    component: "JDictSelectTag",
    componentProps: {
      dictCode: "sex",
      placeholder: "请选择性别",
      stringToNumber: true
    },
    show: false
  },
  {
    label: "邮箱",
    field: "email",
    component: "Input",
    required: false,
    dynamicRules: ({ model, schema }) => {
      return [
        {
          ...rules.duplicateCheckRule("sys_user", "email", model, schema, true)[0],
          trigger: "blur"
        },
        { ...rules.rule("email", false)[0], trigger: "blur" }
      ];
    },
    show: false
  },
  {
    label: "手机号码",
    field: "phone",
    component: "Input",
    required: false,
    dynamicRules: ({ model, schema }) => {
      return [
        {
          ...rules.duplicateCheckRule("sys_user", "phone", model, schema, true)[0],
          trigger: "blur"
        },
        { pattern: /^1[3456789]\d{9}$/, message: "手机号码格式有误", trigger: "blur" }
      ];
    },
    show: false
  },
  {
    label: "座机",
    field: "telephone",
    component: "Input",
    rules: [{ pattern: /^0\d{2,3}-[1-9]\d{6,7}$/, message: "请输入正确的座机号码" }],
    show: false
  },
  {
    label: "工作流引擎",
    field: "activitiSync",
    defaultValue: 1,
    component: "JDictSelectTag",
    componentProps: {
      dictCode: "activiti_sync",
      type: "radio",
      stringToNumber: true
    },
    show: false
  }
];

export const formPasswordSchema: FormSchema[] = [
  {
    label: "用户账号",
    field: "username",
    component: "Input",
    componentProps: { readOnly: true }
  },
  {
    label: "登录密码",
    field: "password",
    component: "StrengthMeter",
    componentProps: {
      placeholder: "请输入登录密码"
    },
    rules: [
      {
        required: true,
        message: "请输入登录密码"
      },
      {
        pattern: /^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+`\-={}:";'<>?,./]).{8,}$/,
        message: "密码由8位数字、大小写字母和特殊符号组成!"
      }
    ]
  },
  {
    label: "确认密码",
    field: "confirmPassword",
    component: "InputPassword",
    dynamicRules: ({ values }) => rules.confirmPassword(values, true)
  }
];

export const formAgentSchema: FormSchema[] = [
  {
    label: "",
    field: "id",
    component: "Input",
    show: false
  },
  {
    field: "userName",
    label: "用户名",
    component: "Input",
    componentProps: {
      readOnly: true,
      allowClear: false
    }
  },
  {
    field: "agentUserName",
    label: "代理人用户名",
    required: true,
    component: "JSelectUser",
    componentProps: {
      rowKey: "username",
      labelKey: "realname",
      maxSelectCount: 10
    }
  },
  {
    field: "startTime",
    label: "代理开始时间",
    component: "DatePicker",
    required: true,
    componentProps: {
      showTime: true,
      valueFormat: "YYYY-MM-DD HH:mm:ss",
      placeholder: "请选择代理开始时间",
      getPopupContainer: () => document.body
    }
  },
  {
    field: "endTime",
    label: "代理结束时间",
    component: "DatePicker",
    required: true,
    componentProps: {
      showTime: true,
      valueFormat: "YYYY-MM-DD HH:mm:ss",
      placeholder: "请选择代理结束时间",
      getPopupContainer: () => document.body
    }
  },
  {
    field: "status",
    label: "状态",
    component: "JDictSelectTag",
    defaultValue: "1",
    componentProps: {
      dictCode: "valid_status",
      type: "radioButton"
    }
  }
];

export const formQuitAgentSchema: FormSchema[] = [
  {
    label: "",
    field: "id",
    component: "Input",
    show: false
  },
  {
    field: "userName",
    label: "用户名",
    component: "Input",
    componentProps: {
      readOnly: true,
      allowClear: false
    }
  },
  {
    field: "agentUserName",
    label: "交接人员",
    //required: true,
    component: "JSelectUser",
    componentProps: {
      rowKey: "username",
      labelKey: "realname",
      maxSelectCount: 1
    }
  },
  {
    field: "startTime",
    label: "交接开始时间",
    component: "DatePicker",
    //required: true,
    componentProps: {
      showTime: true,
      valueFormat: "YYYY-MM-DD HH:mm:ss",
      placeholder: "请选择交接开始时间",
      getPopupContainer: () => document.body
    }
  },
  {
    field: "endTime",
    label: "交接结束时间",
    component: "DatePicker",
    //required: true,
    componentProps: {
      showTime: true,
      valueFormat: "YYYY-MM-DD HH:mm:ss",
      placeholder: "请选择交接结束时间",
      getPopupContainer: () => document.body
    }
  },
  {
    field: "status",
    label: "状态",
    component: "JDictSelectTag",
    defaultValue: "1",
    componentProps: {
      dictCode: "valid_status",
      type: "radioButton"
    }
  }
];

//租户用户列表
export const userTenantColumns: BasicColumn[] = [
  {
    title: "用户账号",
    dataIndex: "username",
    width: 120
  },
  {
    title: "用户姓名",
    dataIndex: "realname",
    width: 100
  },
  {
    title: "头像",
    dataIndex: "avatar",
    width: 120,
    customRender: render.renderAvatar
  },
  {
    title: "手机号",
    dataIndex: "phone",
    width: 100
  },
  {
    title: "部门",
    width: 150,
    dataIndex: "orgCodeTxt"
  },
  {
    title: "状态",
    dataIndex: "status",
    width: 80,
    customRender: ({ text }) => {
      if (text === "1") {
        return "正常";
      } else if (text === "3") {
        return "审批中";
      } else {
        return "已拒绝";
      }
    }
  }
];

//用户租户搜索表单
export const userTenantFormSchema: FormSchema[] = [
  {
    label: "账号",
    field: "username",
    component: "Input",
    colProps: { span: 6 }
  },
  {
    label: "名字",
    field: "realname",
    component: "Input",
    colProps: { span: 6 }
  },
  {
    label: "性别",
    field: "sex",
    component: "JDictSelectTag",
    componentProps: {
      dictCode: "sex",
      placeholder: "请选择性别",
      stringToNumber: true
    },
    colProps: { span: 6 }
  }
];
